Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2015, 14:44
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Ajax не работает с тегом формы
Передаю POST запрос, однако он возвращается только при отсутствии <form> и </form>, а в send просто передаю значение параметра, как input.value;

Вот так код работает

<input id="q" type="text" name="ok" />
<input onclick="load()" type="submit" />


Вот так - нет

<form>
<input id="q" type="text" name="ok" />
<input onclick="load()" type="submit" />
</form>



JS один и тот же

function load() {

	var xhr = new XMLHttpRequest();
	
	xhr.onreadystatechange = function() {
	
	
		if(xhr.readyState == 4) document.getElementById('ajax').innerHTML = xhr.responseText;
	
	}
	
	xhr.open('POST', '12.php',true);
	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	xhr.send('ok='+q.value);


}
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2015, 16:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Потому что это кнопка, отправляющая форму на сервер.
Ты хочешь сделать аякс-оптправку с фолбэком на обычную отправку формы?
Тогда пропиши onclick="return load(), false" - отмена клика, и соответственно, стандартной отправки формы.

Если без фолбэка (что есть плохо), то просто поменяй type=submit на type=button, правда тогда кнопка не будет срабатывать по Enter из поля ввода.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2015, 18:12
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Мне лично все равно через что отправлять, сейчас заменил кнопку на блочный div - работает.

Однако появилась другая проблема, вторичный файл не получает параметра, если в send он явно не указан, например send('name='+input.value) - работает, а когда я пишу так

send(new FormData(document.forms.f2))
, или даже так

var formData = new FormData();
formData.append('name','jon');
send(formData);


Ajax возвращает отсутствие параметра name.
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2015, 14:04
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2015, 14:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

FormData шлет только multipart/form-data контент. Хотя проблема не в этом вроде, так как иной Content-Type браузер проигнорирует просто. Сделай запускаемый пример тут, через [ js run ]
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2015, 14:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

И обязательно ли тебе FormData юзать? Не проще x=a&y=b слать?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2015, 14:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,279

Сообщение от hoax Посмотреть сообщение
а когда я пишу так

send(new FormData(document.forms.f2))
, или даже так

var formData = new FormData();
formData.append('name','jon');
send(formData);


Ajax возвращает отсутствие параметра name.
Так ты посмотри, что ты в итоге суешь в тот send()...

Там должна быть строка вида
var params = 'name=' + encodeURIComponent(name) + '&surname=' + encodeURIComponent(surname);
//...
xmlhttp.send(params)

http://xmlhttprequest.ru/
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2015, 16:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

ksa, просвещайся.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 24.02.2015, 23:58
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

в учебнике описано, что в formdata могут бить любые поля, в том числе и файловые.

Просто удобнее объект сразу в send() запихнуть а не прописывать 'param='+input.value.... + кодировка в тд
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2015, 05:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от hoax
Просто удобнее объект
Согласен. Только имей ввиду что FormData - это HTML5.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax не работает в IE dimitar AJAX и COMET 4 18.04.2014 16:14
Как работает обработчик в файле, подгруженном AJAX SweetySugar AJAX и COMET 1 20.08.2011 17:17
Не работает Ajax при проверке формы! Имя jQuery 1 01.07.2011 10:45
Не работает jQuery меню с AJAX eugene1986 jQuery 0 08.07.2010 18:49
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03